package com.foreveredu.propms.service;

import java.util.List;

import com.foreveredu.propms.domain.BuildingType;
import com.foreveredu.propms.domain.ChargeCriterion;
import com.foreveredu.propms.domain.ChargeItem;
import com.foreveredu.propms.domain.ChargeRecord;
import com.foreveredu.propms.domain.ChargeUnit;
import com.foreveredu.propms.domain.ChargeWay;
import com.foreveredu.propms.domain.House;
import com.foreveredu.propms.domain.HouseSource;
import com.foreveredu.propms.domain.HouseType;
import com.foreveredu.propms.domain.PageModel;
import com.foreveredu.propms.domain.ParkLocation;
import com.foreveredu.propms.domain.SinglePropertyChargeCriterion;
import com.foreveredu.propms.domain.SubDistrict;

public interface IChargeService {

	/*
	 * ChargeItem对象的事务处理
	 */
	void saveChargeItem(ChargeItem chargeItem);

	void deleteChargeItemById(int id);

	void updateChargeItem(ChargeItem chargeItem);

	List<ChargeItem> findChargeItems();

	ChargeItem findChargeItemById(int id);

	ChargeItem findChargeItemByName(String name);
	
	ChargeItem findChargeItemByItemId(String itemId);

	//根据收费项目类型查找收费项目
	List<ChargeItem> findChargeItemsByType(int type);
	
	
	/*
	 * ChargeCriterion对象的事务处理
	 */
	void saveChargeCriterion(ChargeCriterion chargeCriterion);

	void deleteChargeCriterionById(int id);

	void updateChargeCriterion(ChargeCriterion chargeCriterion);

	List<ChargeCriterion> findChargeCriterions();

	ChargeCriterion findChargeCriterionById(int id);

	//根据房产和收费项目以及所属小区查找收费标准
	ChargeCriterion findCriterionByHouseAndItem(House house, ChargeItem item, SubDistrict subDistrict);

	//针对房产类型，楼栋类型，房产来源，所属收费项目以及所属小区查找收费标准
	ChargeCriterion findCriterionByTypeAndItem(HouseType houseType, BuildingType buildingType, HouseSource source, ChargeItem item, SubDistrict subDistrict);


	/*
	 * ChargeRecord对象的事务处理
	 */
	void saveChargeRecord(ChargeRecord chargeRecord);

	void deleteChargeRecordById(int id);

	void updateChargeRecord(ChargeRecord chargeRecord);

	List<ChargeRecord> findChargeRecords();

	ChargeRecord findChargeRecordById(int id);

	/*
	 * ChargeWay对象的事务处理
	 */
	List<ChargeWay> findChargeWays();

	void saveChargeWay(ChargeWay chargeWay);

	void deleteChargeWayById(int id);

	ChargeWay findChargeWayById(int id);

	void updateChargeWay(ChargeWay chargeWay);

	/*
	 * ChargeUnit对象的事务处理
	 */
	List<ChargeUnit> findChargeUnits();

	void saveChargeUnit(ChargeUnit chargeUnit);

	void deleteChargeUnitById(int id);

	ChargeUnit findChargeUnitById(int id);

	void updateChargeUnit(ChargeUnit chargeUnit);
	

	/*
	 * ParkLocation对象的事务处理
	 */
	List<ParkLocation> findParkLocations();

	void saveParkLocation(ParkLocation parkLocation);

	void deleteParkLocationById(int id);

	ParkLocation findParkLocationById(int id);

	void updateParkLocation(ParkLocation parkLocation);


	/*
	 * SinglePropertyChargeCriterion对象的事务处理
	 */
	void saveSinglePropertyChargeCriterion(SinglePropertyChargeCriterion chargeCriterion);

	void deleteSinglePropertyChargeCriterionById(int id);

	void updateSinglePropertyChargeCriterion(SinglePropertyChargeCriterion chargeCriterion);

	List<SinglePropertyChargeCriterion> findSinglePropertyChargeCriterions();

	SinglePropertyChargeCriterion findSinglePropertyChargeCriterionById(int id);

	//查找所有的单独收费列表
	List<ChargeCriterion> findSingleChargeCriterions();
	
	//查找所有的普通收费标准
	List<ChargeCriterion> findPrimaryChargeCriterions();

	PageModel findChargeCriterionsList(int offset);
	//查找所有的单独收费列表(翻页)
	PageModel findSingChargeCriterionsList(int offset);

	void deleteChargeRecord(ChargeRecord chargeRecord);
}
